home *** CD-ROM | disk | FTP | other *** search
/ PC World 2007 January / PCWorld_2007-01_cd.bin / v cisle / hotkey / AutoHotkey104504_Install.exe / AutoHotkey.chm / docs / scripts / keyboardonscreen.ahk < prev    next >
Text File  |  2006-11-15  |  7KB  |  231 lines

  1. ; On-Screen Keyboard (requires XP/2k/NT) -- by Jon
  2. ; http://www.autohotkey.com
  3. ; This script creates a mock keyboard at the bottom of your screen that shows
  4. ; the keys you are pressing in real time. I made it to help me to learn to
  5. ; touch-type (to get used to not looking at the keyboard).  The size of the
  6. ; on-screen keyboard can be customized at the top of the script. Also, you
  7. ; can double-click the tray icon to show or hide the keyboard.
  8.  
  9. ;---- Configuration Section: Customize the size of the on-screen keyboard and
  10. ; other options here.
  11.  
  12. ; Changing this font size will make the entire on-screen keyboard get
  13. ; larger or smaller:
  14. k_FontSize = 10
  15. k_FontName = Verdana  ; This can be blank to use the system's default font.
  16. k_FontStyle = Bold    ; Example of an alternative: Italic Underline
  17.  
  18. ; Names for the tray menu items:
  19. k_MenuItemHide = Hide on-screen &keyboard
  20. k_MenuItemShow = Show on-screen &keyboard
  21.  
  22. ; To have the keyboard appear on a monitor other than the primary, specify
  23. ; a number such as 2 for the following variable.  Leave it blank to use
  24. ; the primary:
  25. k_Monitor = 
  26.  
  27. ;---- End of configuration section.  Don't change anything below this point
  28. ; unless you want to alter the basic nature of the script.
  29.  
  30.  
  31. ;---- Alter the tray icon menu:
  32. Menu, Tray, Add, %k_MenuItemHide%, k_ShowHide
  33. Menu, Tray, Add, &Exit, k_MenuExit
  34. Menu, Tray, Default, %k_MenuItemHide%
  35. Menu, Tray, NoStandard
  36.  
  37. ;---- Calculate object dimensions based on chosen font size:
  38. k_KeyWidth = %k_FontSize%
  39. k_KeyWidth *= 3
  40. k_KeyHeight = %k_FontSize%
  41. k_KeyHeight *= 3
  42. k_KeyMargin = %k_FontSize%
  43. k_KeyMargin /= 6
  44. k_SpacebarWidth = %k_FontSize%
  45. k_SpacebarWidth *= 25
  46. k_KeyWidthHalf = %k_KeyWidth%
  47. k_KeyWidthHalf /= 2
  48.  
  49. k_KeySize = w%k_KeyWidth% h%k_KeyHeight%
  50. k_Position = x+%k_KeyMargin% %k_KeySize%
  51.  
  52. ;---- Create a GUI window for the on-screen keyboard:
  53. Gui, Font, s%k_FontSize% %k_FontStyle%, %k_FontName%
  54. Gui, -Caption +E0x200 +ToolWindow
  55. TransColor = F1ECED
  56. Gui, Color, %TransColor%  ; This color will be made transparent later below.
  57.  
  58. ;---- Add a button for each key. Position the first button with absolute
  59. ; coordinates so that all other buttons can be positioned relative to it:
  60. Gui, Add, Button, section %k_KeySize% xm+%k_KeyWidth%, 1
  61. Gui, Add, Button, %k_Position%, 2
  62. Gui, Add, Button, %k_Position%, 3
  63. Gui, Add, Button, %k_Position%, 4
  64. Gui, Add, Button, %k_Position%, 5
  65. Gui, Add, Button, %k_Position%, 6
  66. Gui, Add, Button, %k_Position%, 7
  67. Gui, Add, Button, %k_Position%, 8
  68. Gui, Add, Button, %k_Position%, 9
  69. Gui, Add, Button, %k_Position%, 0
  70. Gui, Add, Button, %k_Position%, -
  71. Gui, Add, Button, %k_Position%, =
  72. Gui, Add, Button, %k_Position%, Bk
  73.  
  74. Gui, Add, Button, xm y+%k_KeyMargin% h%k_KeyHeight%, Tab  ; Auto-width.
  75. Gui, Add, Button, %k_Position%, Q
  76. Gui, Add, Button, %k_Position%, W
  77. Gui, Add, Button, %k_Position%, E
  78. Gui, Add, Button, %k_Position%, R
  79. Gui, Add, Button, %k_Position%, T
  80. Gui, Add, Button, %k_Position%, Y
  81. Gui, Add, Button, %k_Position%, U
  82. Gui, Add, Button, %k_Position%, I
  83. Gui, Add, Button, %k_Position%, O
  84. Gui, Add, Button, %k_Position%, P
  85. Gui, Add, Button, %k_Position%, [
  86. Gui, Add, Button, %k_Position%, ]
  87. Gui, Add, Button, %k_Position%, \
  88.  
  89. Gui, Add, Button, xs+%k_KeyWidthHalf% y+%k_KeyMargin% %k_KeySize%, A
  90. Gui, Add, Button, %k_Position%, S
  91. Gui, Add, Button, %k_Position%, D
  92. Gui, Add, Button, %k_Position%, F
  93. Gui, Add, Button, %k_Position%, G
  94. Gui, Add, Button, %k_Position%, H
  95. Gui, Add, Button, %k_Position%, J
  96. Gui, Add, Button, %k_Position%, K
  97. Gui, Add, Button, %k_Position%, L
  98. Gui, Add, Button, %k_Position%, `;
  99. Gui, Add, Button, %k_Position%, '
  100. Gui, Add, Button, x+%k_KeyMargin% h%k_KeyHeight%, Enter  ; Auto-width.
  101.  
  102. ; The first button below adds %A_Space% at the end to widen it a little,
  103. ; making the layout of keys next to it more accurately reflect a real keyboard:
  104. Gui, Add, Button, xm y+%k_KeyMargin% h%k_KeyHeight%, Shift%A_Space%%A_Space%
  105. Gui, Add, Button, %k_Position%, Z
  106. Gui, Add, Button, %k_Position%, X
  107. Gui, Add, Button, %k_Position%, C
  108. Gui, Add, Button, %k_Position%, V
  109. Gui, Add, Button, %k_Position%, B
  110. Gui, Add, Button, %k_Position%, N
  111. Gui, Add, Button, %k_Position%, M
  112. Gui, Add, Button, %k_Position%, `,
  113. Gui, Add, Button, %k_Position%, .
  114. Gui, Add, Button, %k_Position%, /
  115.  
  116. Gui, Add, Button, xm y+%k_KeyMargin% h%k_KeyHeight%, Ctrl  ; Auto-width.
  117. Gui, Add, Button, h%k_KeyHeight% x+%k_KeyMargin%, Win      ; Auto-width.
  118. Gui, Add, Button, h%k_KeyHeight% x+%k_KeyMargin%, Alt      ; Auto-width.
  119. Gui, Add, Button, h%k_KeyHeight% x+%k_KeyMargin% w%k_SpacebarWidth%, Space
  120.  
  121.  
  122. ;---- Show the window:
  123. Gui, Show
  124. k_IsVisible = y
  125.  
  126. WinGet, k_ID, ID, A   ; Get its window ID.
  127. WinGetPos,,, k_WindowWidth, k_WindowHeight, A
  128.  
  129. ;---- Position the keyboard at the bottom of the screen (taking into account
  130. ; the position of the taskbar):
  131. SysGet, k_WorkArea, MonitorWorkArea, %k_Monitor%
  132.  
  133. ; Calculate window's X-position:
  134. k_WindowX = %k_WorkAreaRight%
  135. k_WindowX -= %k_WorkAreaLeft%  ; Now k_WindowX contains the width of this monitor.
  136. k_WindowX -= %k_WindowWidth%
  137. k_WindowX /= 2  ; Calculate position to center it horizontally.
  138. ; The following is done in case the window will be on a non-primary monitor
  139. ; or if the taskbar is anchored on the left side of the screen:
  140. k_WindowX += %k_WorkAreaLeft%
  141.  
  142. ; Calculate window's Y-position:
  143. k_WindowY = %k_WorkAreaBottom%
  144. k_WindowY -= %k_WindowHeight%
  145.  
  146. WinMove, A,, %k_WindowX%, %k_WindowY%
  147. WinSet, AlwaysOnTop, On, ahk_id %k_ID%
  148. WinSet, TransColor, %TransColor% 220, ahk_id %k_ID%
  149.  
  150.  
  151. ;---- Set all keys as hotkeys. See www.asciitable.com
  152. k_n = 1
  153. k_ASCII = 45
  154.  
  155. Loop
  156. {
  157.     Transform, k_char, Chr, %k_ASCII%
  158.     StringUpper, k_char, k_char
  159.     if k_char not in <,>,^,~,ü,`,
  160.         Hotkey, ~*%k_char%, k_KeyPress
  161.         ; In the above, the asterisk prefix allows the key to be detected regardless
  162.         ; of whether the user is holding down modifier keys such as Control and Shift.
  163.     if k_ASCII = 93
  164.         break
  165.     k_ASCII++
  166. }
  167.  
  168. return ; End of auto-execute section.
  169.  
  170.  
  171. ;---- When a key is pressed by the user, click the corresponding button on-screen:
  172.  
  173. ~*Backspace::
  174. ControlClick, Bk, ahk_id %k_ID%, , LEFT, 1, D
  175. KeyWait, Backspace
  176. ControlClick, Bk, ahk_id %k_ID%, , LEFT, 1, U
  177. return
  178.  
  179.  
  180. ; LShift and RShift are used rather than "Shift" because when used as a hotkey,
  181. ; "Shift" would default to firing upon release of the key (in older AHK versions):
  182. ~*LShift::
  183. ~*RShift::
  184. ~*LCtrl::  ; Must use Ctrl not Control to match button names.
  185. ~*RCtrl::
  186. ~*LAlt::
  187. ~*RAlt::
  188. ~*LWin::
  189. ~*RWin::
  190. StringTrimLeft, k_ThisHotkey, A_ThisHotkey, 3
  191. ControlClick, %k_ThisHotkey%, ahk_id %k_ID%, , LEFT, 1, D
  192. KeyWait, %k_ThisHotkey%
  193. ControlClick, %k_ThisHotkey%, ahk_id %k_ID%, , LEFT, 1, U
  194. return
  195.  
  196.  
  197. ~*,::
  198. ~*'::
  199. ~*Space::
  200. ~*Enter::
  201. ~*Tab::
  202. k_KeyPress:
  203. StringReplace, k_ThisHotkey, A_ThisHotkey, ~
  204. StringReplace, k_ThisHotkey, k_ThisHotkey, *
  205. SetTitleMatchMode, 3  ; Prevents the T and B keys from being confused with Tab and Backspace.
  206. ControlClick, %k_ThisHotkey%, ahk_id %k_ID%, , LEFT, 1, D
  207. KeyWait, %k_ThisHotkey%
  208. ControlClick, %k_ThisHotkey%, ahk_id %k_ID%, , LEFT, 1, U
  209. Return
  210.  
  211.  
  212. k_ShowHide:
  213. if k_IsVisible = y
  214. {
  215.     Gui, Cancel
  216.     Menu, Tray, Rename, %k_MenuItemHide%, %k_MenuItemShow%
  217.     k_IsVisible = n
  218. }
  219. else
  220. {
  221.     Gui, Show
  222.     Menu, Tray, Rename, %k_MenuItemShow%, %k_MenuItemHide%
  223.     k_IsVisible = y
  224. }
  225. return
  226.  
  227.  
  228. GuiClose:
  229. k_MenuExit:
  230. ExitApp
  231.